package com.cskaoyan.catmall.aspectj;

import com.cskaoyan.catmall.dao.WxCouponMapper;
import com.cskaoyan.catmall.model.pojo.MarketUser;
import org.apache.catalina.security.SecurityUtil;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.Subject;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * 创建日期: 2022-01-10-19-34
 * author : WQW
 * description: 在每次获取用户优惠信息之前更新用户优惠卷过期状态
 */

@Order(3)
@Aspect
@Component
public class UserCouponAspect {

    @Autowired
    WxCouponMapper wxCouponMapper;


    /**
     * @param
     * @return void
     * @description 在用户对优惠卷进行操作前，先更新用户优惠卷的状态
     * @author WQW
     * @date 2022/1/10 20:09
     */
    @Transactional
    @Before("execution(* com.cskaoyan.catmall.service..WxCouponServiceImpl.*(..))")
    public void UpdateCouponStatus() {
        Subject subject = SecurityUtils.getSubject();
        MarketUser user = (MarketUser) subject.getPrincipal();

        // 查询用户访问时间点，数据库用户优惠卷表中未过期，但是实际已经过期的优惠卷信息，并更新该用户优惠卷状态信息
        if (user != null) {
            List<Integer> idUserCouponList = wxCouponMapper.selectUserUpdateCoupon(user.getId());
            if (idUserCouponList.size() != 0) {
                wxCouponMapper.updateUserCouponTime(idUserCouponList);
            }
        }
        // 查询用户访问时间点，数据库中优惠卷表中未过期，但是实际已经过期的优惠卷信息，并更新该用户优惠卷状态信息
        List<Integer> idCouponList = wxCouponMapper.selectUpdateCoupon();
        if (idCouponList.size() != 0) {
            wxCouponMapper.updateCoupon(idCouponList);
        }

    }
}